package com.vtuzx.kingdee.xqc_api.service;

import com.vtuzx.core.VtuzxException;
import com.vtuzx.core.bean.dto.VtuzxFile;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.core.bean.dto.VtuzxToken;
import org.bson.types.ObjectId;

import java.util.List;
import java.util.Map;

/**
 * 销售服务
 */
public interface IXqcSaleService {


    /**
     * 保存用户销售出库单
     *
     * @param _userId 用户ID
     */
    VtuzxMap saveUserSaleOut(ObjectId _userId, String name, Map<String, Object> param) throws VtuzxException;

    /**
     * 添加用户销售出库箱号+数量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param boxNo 箱号
     * @param count 数量
     * @return 添加后物料信息
     */
    VtuzxMap addUserSaleOutMaterialBox(ObjectId _userId, String name, String stockNo, String boxNo, int count) throws VtuzxException;


    /**
     * 添加用户生产领料箱号+数量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param boxList 箱号列表
     * @return 添加后物料信息
     */
    Object addUserSaleOutMaterialBoxList(ObjectId _userId, String name, String stockNo, List<Map<String, Object>> boxList) throws VtuzxException;

    /**
     * 删除用户销售出库单分录
     *
     * @param _userId 用户ID
     * @return 删除后物料信息
     */
    VtuzxMap deleteUserSaleOutMaterialBox(ObjectId _userId, String id);

    /**
     * 删除用户销售出库单分录
     *
     * @param _userId 用户ID
     */
    void deleteUserSaleOutMaterial(ObjectId _userId, String id);

    /**
     * 删除用户销售出库单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     */
    void deleteUserSaleOut(ObjectId _userId, String stockNo);

    /**
     * 更新用户销售出库单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param materialNo 物料编码
     * @param boxNo 物料编码
     * @param count 数量
     * @return 更新后物料信息
     */
    VtuzxMap updateUserSaleOutMaterialBox(ObjectId _userId, String stockNo, String materialNo, String boxNo, double count);

    /**
     * 获取用户未保存销售出库单分录列表
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserSaleOutMaterial(ObjectId _userId, String stockNo);

    /**
     * 获取用户未保存销售出库单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserSaleOutMaterialBox(ObjectId _userId, String _detailId);

    /**
     * 获取创建者销售出库单列表
     *
     * @param _userId 用户ID
     * @param param 仓库编码
     * @return 采购入库单列表
     */
    VtuzxMap getSaleOutBill(ObjectId _userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 获取创建者销售出库单分录
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param billNo 采购入库单号
     * @return 采购入库单分录
     */
    VtuzxMap getSaleOutBillDetail(ObjectId _userId, String stockNo, String billNo);

    /**
     * 获取创建者销售出库单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 采购入库单分录的箱号列表
     */
    VtuzxMap getSaleOutBillDetailBox(ObjectId _userId, String _detailId);

    /**
     * 上传文件
     * @param token
     * @param param
     * @param vFileList
     */
    void uploadStoreBill(VtuzxToken token, Map<String, Object> param, List<VtuzxFile> vFileList) throws Exception;


    void uploadStoreSaleBill(VtuzxToken token, Map<String, Object> param, List<VtuzxFile> vFileList) throws Exception;

    VtuzxMap getSaleStoreBill(ObjectId userId, Map<String, Object> param, int pageIndex, int pageSize);

    VtuzxMap getSaleStoreBillDetail(ObjectId userId, String billNo);

    void storeSaleBillOutList(ObjectId userId, String name, List<String> billNo) throws VtuzxException;

    /**
     * 获取门店销售订单
     * @param userId
     * @param param
     * @param pageIndex
     * @param pageSize
     * @return
     */
    VtuzxMap getSaleStoreSaleBill(ObjectId userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 获取门店销售订单分录列表
     * @param userId
     * @param billNo
     * @return
     */
    VtuzxMap getSaleStoreSaleBillDetail(ObjectId userId, String billNo);

    void deleteBindTraceBack(ObjectId userId, String boxNo, String traceBack);

    void uploadDistributorBill(VtuzxToken token, Map<String, Object> param, List<VtuzxFile> vFileList) throws Exception;

    VtuzxMap getjkySaleOut(ObjectId userId, Map<String, Object> param, int pageIndex, int pageSize);

}
